package com.oracle.controller;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.oracle.pojo.Student;
import com.oracle.service.IStudentService;
import com.oracle.util.MD5;
import com.oracle.util.Result;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/sms/studentController")
@Api(tags = "学生管理控制器")
public class StudentController {
    @Autowired
    private IStudentService studentService;
    /**
     * 模糊查询带分页操作
     * /sms/studentController/getStudentByOpr/1/3
     */
    @GetMapping("/getStudentByOpr/{pageNo}/{pageSize}")
    @ApiOperation("模糊查询带分页功能")
    public Result getStudentsByCondition(
            @ApiParam("分页查询页码") @PathVariable("pageNo") Integer pageNo
            ,
            @ApiParam("分页查询页大小") @PathVariable("pageSize") Integer pageSize
            ,
            @ApiParam("模糊查询筛选条件之班级名称") String className
            ,
            @ApiParam("模糊查询筛选条件之学生姓名") String name
    ){
        // 创建Page对象
        Page<Student> studentPage = new Page<>(pageNo, pageSize);
        // 执行业务方法
        IPage<Student> iPage = studentService.getStudentByConditions(studentPage,className,name);

        return Result.ok(iPage);
    }
    /**
     * 添加学生信息或者修改学生信息操作
     */
    @PostMapping("/addOrUpdateStudent")
    @ApiOperation("增加学生或者修改学生信息功能")
    public Result saveOrUpdateStudentInfo(
            @ApiParam("要增加或者修改的学生信息封装类实体") @RequestBody Student student
    ){
        Long id = student.getId();
        // 如果学生id为空，则证明是添加操作
        if (id == null || id == 0) {
            // 添加学生时，需要对学生的密码进行加密处理
            String newPassword = MD5.encrypt(student.getPassword());
            // 将加密之后的密码设置给Student
            student.setPassword(newPassword);
        }
        // 如果学生的id不为空，则正常执行修改操作
        studentService.saveOrUpdate(student);

        return Result.ok();
    }
    /**
     * 删除单个学生信息或者批量删除学生信息操作
     * delStudentById
     */
    @DeleteMapping("/delStudentById")
    @ApiOperation("删除单个学生信息或者批量删除学生信息功能")
    public Result deleteStudentsOrOne(
            @ApiParam("要删除的学生的id数组") @RequestBody List<Long> ids
            ){
        studentService.removeByIds(ids);
        return Result.ok();
    }
}
